import Vue from "vue";
import * as XEUtils from 'xe-utils';
import  VXETable from 'vxe-table';
// ...
import VXETablePluginElement from 'vxe-table-plugin-element';
import 'vxe-table-plugin-element/dist/style.css';
import 'vxe-table/lib/index.css';
// ...
import App from "./App";
import * as filters from './filters/index';
import  http  from './http';
import "./plugins";
import router from "./router";
import store from "./store";


Vue.use(VXETable)

VXETable.use(VXETablePluginElement)



Object.keys(filters).forEach(key => {
    Vue.filter(key, filters[key])
})

// Object.keys(filters).forEach(key => {
//   Vue.prototype[key] = filters[key]
// })

// if (process.env.NODE_ENV === "test") {
//   const { mockXHR } = require("../mock/static");
//   mockXHR();
// }


Vue.prototype.$http = http
Vue.prototype.XEUtils = XEUtils



Vue.config.productionTip = false;

Vue.use(router);

Vue.mixin({
  computed: {
    uploadUrl(){
      return this.$http.defaults.baseURL + '/app/upload'
    }
  },
  methods: {
    getAuthHeaders(){
      return {
        Authorization: `Bearer ${localStorage.token || ''}`
      }
    },
    clearNullField(obj, key) {
      if(!obj[key]) {
        delete obj[key]
      }
    },
    importAndExportConfig(tableData, config) {
      // var config = {
      //   exclude: ["image", "id"],
      //   "createdAt": {
      //     index: 10,
      //     alias: "hahah",
      //     // map: () => {}
      //   },
      //   "id": {
      //     index: 9,
      //     // map: () => {}
      //   },
      //   "partyOrganization": {
      //     index: 8,
      //     // map: () => {}
      //   },
      //   "status": {
      //     index: 7,
      //     // map: () => {}
      //   },
      //   "duties": {
      //     index: 6,
      //     // map: () => {}
      //   },
      //   "lnauguralAddress": {
      //     index: 5,
      //     // map: () => {}
      //   },
      //   "education": {
      //     index: 4,
      //     // map: () => {}
      //   },
      //   "periodOfActivists": {
      //     index: 3,
      //     // map: () => {}
      //   },
      //   "periodOfDevelopmentObject": {
      //     index: 2,
      //     // map: () => {}
      //   },
      //   "periodOfProbationaryMember": {
      //     index: 1,
      //     // map: () => {}
      //   },
      //   "periodOfPartyMember": {
      //     index: -1,
      //     // map: () => {}
      //   },
      //   "image": {
      //     index: -2,
      //     // map: () => {}
      //   },
      //   "name": {
      //     index: -3,
      //     // map: () => {}
      //   },
      //   "sex": {
      //     index: -4,
      //     // map: () => {}
      //   },
      //   "nation": {
      //     index: -5,
      //     // map: () => {}
      //   },
      //   "phone": {
      //     index: -6,
      //     // map: () => {}
      //   },
      //   "identityNumber": {
      //     index: -7,
      //     // map: () => {}
      //   },
      //   "address": {
      //     index: -8,
      //     // map: () => {}
      //   },
      //   "village": {
      //     index: -9,
      //     // map: () => {}
      //   },
      //   "group": {
      //     index: -10,
      //     // map: () => {}
      //   }
      // }

      if(tableData.allFiles) {
        let config = tableData
        let aliasAtt = []
        config.allFiles.sort((a, b) => config[a].index - config[b].index )

        config.allFiles.forEach(header => aliasAtt.push(config[header].alias))

        return  {
          header: config.allFiles,
          data: [aliasAtt]
        }
      }

      var headers = tableData.header
      var data = tableData.data

      // if(data.length == 0) {
      //   return {}
      // }
    
      var res = []
    
      //整理数据结构方便排序 删除
      headers.forEach(header => res.push({
        header,
        data: []
      }))
    
      //对 每列 做数据映射
      debugger
      data.forEach(row => {
        row.forEach((item, index) => {
          res[index].data.push(item)
        })
      })
    
    
      //找到删除项 进行删除
      let delIndexAtt = []
      res.forEach((data, index) => {
        if(config.exclude.indexOf(data.header) != -1)
          delIndexAtt.push(index)
      })
        
      delIndexAtt.reverse()
    
      delIndexAtt.forEach(index => {
        res.splice(index, 1)
      })
    
      console.log(res)
      //根据配置 进行排序
      res.sort((a, b) => config[a.header].index - config[b.header].index)
    
      var result = []
    
      let resHead = []
      let aliasHead = []
      //整理最终数据
      res.forEach((item, index) => {
        resHead.push(item.header)
        aliasHead.push(config[item.header].alias || item.header)
        item.data.forEach((v, i) => {
          let resItem =  config[item.header].map ? config[item.header].map(v) : v
          if(index == 0) {
            result[i] = []
          }
            result[i].push(resItem)
          })
      })
    
      //把 头 别名 整理进去
      result.unshift(aliasHead)

      return {
        header: resHead,
        data: result
      }
    }
  }
})

new Vue({
  el: "#vue-admin-beautiful",
  router,
  store,
  render: (h) => h(App),
});
